#pragma once
#include "lwmp.h"
#include "CircularBuffer.h"

template<typename MP=os::memory_pool_t,typename T=os::memory_pool_t::memory_node_t*,uint32_t queue_sz=3>
class Mail
{
public:
Mail()=default;
~Mail()=default;

os::memory_pool_t::memory_node_t* alloc()
{
    return _mp.alloc();
}
void free(os::memory_pool_t::memory_node_t* mem)
{
    _mp.free(mem);
}

bool get(T& data)
{
   return _cb.pop(data);
}
void put(T& data)
{
   return _cb.push(data);
}
bool full()
{
    return _cb.full();
}
bool empty()
{
    return _cb.empty();
}
private:
    MP _mp;
    CircularBuffer<T,queue_sz> _cb;
};